namespace CL_SHALLOW_COPY {

	namespace bad {
	
		struct D {

		};

		class C {
		public:
			C();
			~C() {
				delete d;
			}
			C(const C& rhs) {
				d = rhs.d;
			}
		private:
			C& operator=(const C&);
			D* d;
		};
	
	}

	namespace good {
		struct D {
			D(const D&);
		};

		class C {
		public:
			C();
			~C() {
				delete d;
			}
			C(const C& rhs) {
				d = new D(*rhs.d);
			}
		private:
			C& operator=(const C&);
			D* d;
		};
	}

}